#include"Display.h"
#include"temp.h"
#include"delay.h"
unsigned char DisplayData[8];
//unsigned char code DIG_CODE[18]={
//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
//0x77,0x7c,0x39,0x5e,0x79,0x71,0X40};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、-的显示码
/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 使用数码管显示
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void DigDisplay()
{
	unsigned char i;
	unsigned int j;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选，选择点亮的数码管，
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(6):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(7):
				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		GPIO_DIG=DisplayData[i];//发送段码
		j=50;						 //扫描间隔时间设定
		while(j--);	
		GPIO_DIG=0x00;//消隐
	}
}
/*******************************************************************************
* 函 数 名         : ClearDisplay
* 函数功能		   : 数码管清空
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void ClearDisplay() {
    unsigned char i;
    for (i = 0; i < 8; i++) {
        DisplayData[i] = 0x00;  // 设置所有数码管的段码为0
    }
    DigDisplay();  // 刷新显示
}

/*******************************************************************************
* 函 数 名         : Display_temp()
* 函数功能        : 数码管显示读取到的温度
* 输    入         : temp
* 输    出         : 无
*******************************************************************************/
//void Display_temp(int temp) 	 //lcd显示
//{
//   	float tp;  
//	if(temp< 0)				//当温度值为负数
//  	{
//		DisplayData[4] = 0x40; 
//		//因为读取的温度是实际温度的补码，所以减1，再取反求出原码
//		temp=temp-1;
//		temp=~temp;
//		tp=temp;
//		temp=tp*0.0625*100+0.5;	
//		//留两个小数点就*100，+0.5是四舍五入，因为C语言浮点数转换为整型的时候把小数点
//		//后面的数自动去掉，不管是否大于0.5，而+0.5之后大于0.5的就是进1了，小于0.5的就
//		//算由?.5，还是在小数点后面。
// 
//  	}
// 	else
//  	{			
//		DisplayData[4] = 0x00;
//		tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//		//如果温度是正的那么，那么正数的原码就是补码它本身
//		temp=tp*0.0625*100+0.5;	
//		//留两个小数点就*100，+0.5是四舍五入，因为C语言浮点数转换为整型的时候把小数点
//		//后面的数自动去掉，不管是否大于0.5，而+0.5之后大于0.5的就是进1了，小于0.5的就
//		//算加上0.5，还是在小数点后面。
//	}
//		DisplayData[0] =0X40 ;
//		DisplayData[1] =0x66 ;
//		DisplayData[2] =0X40 ;
//    DisplayData[3] = 0x00;
//		DisplayData[4] = DisplayData[4];  // 负号
//	
//	DisplayData[5] = DIG_CODE[temp % 10000 / 1000];
//	DisplayData[6] = DIG_CODE[temp % 1000 / 100] | 0x80;
//	DisplayData[7] = 0x39;

// 	DigDisplay();					   //扫描显示
////		delay(100);
//}
int lastTemp = 0;
/*******************************************************************************
* 函 数 名         : Display_temp()
* 函数功能        : 数码管显示读取到的温度
* 输    入         : temp
* 输    出         : 无
*******************************************************************************/
void Display_temp(int temp) 	 //lcd显示
{
    float tp;  
    int displayTemp;

    if (temp < 0)				//当温度值为负数
    {
        // 显示上一次的温度数据
        displayTemp = lastTemp;
    }
    else
    {
        // 更新上一次的温度数据
        lastTemp = temp;
        displayTemp = temp;
    }

    // 处理显示数据
    if (displayTemp < 0)
    {
        DisplayData[4] = 0x40; 
        displayTemp = displayTemp - 1;
        displayTemp = ~displayTemp;
        tp = displayTemp;
        displayTemp = tp * 0.0625 * 100 + 0.5;
    }
    else
    {
        DisplayData[4] = 0x00;
        tp = displayTemp;
        displayTemp = tp * 0.0625 * 100 + 0.5;
    }

    DisplayData[0] = 0X40;
    DisplayData[1] = 0x66;
    DisplayData[2] = 0X40;
    DisplayData[3] = 0x00;
    DisplayData[4] = DisplayData[4];  // 负号

    DisplayData[5] = DIG_CODE[displayTemp % 10000 / 1000];
    DisplayData[6] = DIG_CODE[displayTemp % 1000 / 100] | 0x80;
    DisplayData[7] = 0x39;

    DigDisplay();					   //扫描显示
}